package com.itlong.cloud.app.dao;

import com.itlong.cloud.POJO.DTO.app.AppElevatorAuthDTO;
import com.itlong.cloud.POJO.DTO.app.MiniScanQrCodePassDTO;
import com.itlong.cloud.POJO.PO.*;
import com.itlong.cloud.POJO.VO.app.AppCloudIntercomsVO;
import com.itlong.cloud.POJO.VO.app.AppDoorDevicesVO;
import com.itlong.cloud.POJO.VO.app.AppFloorDevicesVO;
import com.itlong.cloud.POJO.VO.common.ProjectIotInfo;
import com.itlong.cloud.POJO.VO.common.QrcodeUserInfoVO;
import com.itlong.cloud.POJO.VO.app.*;
import com.itlong.cloud.POJO.VO.miniprogram.MiniProgramUserRoomInfoVO;
import com.itlong.cloud.POJO.VO.operate.OperateDeviceQRCodeInfoVO;
import com.itlong.cloud.POJO.VO.property.CloudElevatorVO;
import com.itlong.cloud.POJO.VO.property.PropertyQrcodeValidVO;
import com.itlong.cloud.POJO.VO.property.PushCloudRoomInfoDeviceVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <desc>
 * APP设备信息数据访问接口
 * </desc>
 *
 * @createDate 2017/10/23
 */
@Mapper
@Repository
public interface IAppDeviceDao {

    /**
     * <desc>
     * 根据用户电梯权限获取外呼信息
     * </desc>
     *
     * @param deviceUnique
     * @param floors
     * @return
     * @author Jiaqi.X
     * @createDate 2020/06/02
     */
    Map<String, Object> getOutCallDevicesByElevatorAndFloor(@Param("deviceUnique") String deviceUnique, @Param("floors") Set<String> floors);

    /**
     * <desc>
     * 获取用户门禁设备列表
     * </desc>
     *
     * @param userId    用户Id
     * @param projectId 项目Id
     * @param doors     门禁的设备id数组
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/23
     */
    List<AppDoorDevicesVO> getDoorDevices(@Param("userId") String userId, @Param("projectId") String projectId, @Param("doors") String[] doors);

    /**
     * <desc>
     * 获取用户有权限的门禁设备机号
     * </desc>
     *
     * @param userId    用户Id
     * @param projectId 项目Id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/24
     */
    List<Map<String, Object>> getDoorAuth(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取用户有权限的门禁设备机号
     * </desc>
     *
     * @param userId    用户Id
     * @param projectId 项目Id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/24
     */
    List<Map<String, Object>> getTempDoorAuth(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取用户有权限的门禁设备机号
     * </desc>
     *
     * @param userId    用户Id
     * @param projectId 项目Id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/24
     */
    List<Map<String, Object>> getSmartCardDoorAuth(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取用户电梯设备列表
     * </desc>
     *
     * @param userId    用户Id
     * @param projectId 项目Id
     * @param floorIds  电梯设备id数组
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/23
     */
    List<AppFloorDevicesVO> getFloorDevices(@Param("userId") String userId, @Param("projectId") String projectId, @Param("floorIds") String[] floorIds);

    /**
     * <desc>
     * 获取用户云对讲设备列表
     * </desc>
     *
     * @param userId    用户Id
     * @param projectId 项目Id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/23
     */
    List<AppCloudIntercomsVO> getCloudIntercoms(@Param("userId") String userId, @Param("projectId") String projectId, @Param("cloudIntercoms") String[] cloudIntercoms);

    /**
     * <desc>
     * 获取用户云对讲设备机号
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/24
     */
    List<Map<String, Object>> getCloudIntercomsAuth(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取用户云对讲设备机号
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/24
     */
    List<Map<String, Object>> getTempCloudIntercomsAuth(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取用户电梯设备机号
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/24
     */
    List<AppElevatorAuthDTO> getFloorAuth(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取用户电梯设备机号
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/24
     */
    List<AppElevatorAuthDTO> getTempFloorAuth(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取用户电梯设备机号
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/24
     */
    List<AppElevatorAuthDTO> getAddressAuth(@Param("userId") String userId, @Param("projectId") String projectId);


    /**
     * <desc>
     * 获取用户电梯设备机号
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/24
     */
    List<AppElevatorAuthDTO> getSmartCardFloorAuth(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 通过设备归属表获取设备id 多个id,号分隔
     * </desc>
     *
     * @param projectId 项目id
     * @param buildId   栋id数组
     * @param unitId    单元id数组
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/30
     */
    String getCloudDeviceIdsForBridge(@Param("projectId") String projectId,
                                      @Param("buildId") String buildId,
                                      @Param("unitId") String unitId,
                                      @Param("deviceIds") String[] deviceIds);

    /**
     * <desc>
     * 通过设备归属表获取设备id 多个id,号分隔
     * </desc>
     *
     * @param projectId 项目id
     * @param buildId   栋id数组
     * @param unitId    单元id数组
     * @return
     * @author Jiaqi.X
     * @createDate 2018/01/02
     */
    String getEntranceDeviceIdsForBridge(@Param("projectId") String projectId,
                                         @Param("buildId") String buildId,
                                         @Param("unitId") String unitId,
                                         @Param("deviceIds") String[] deviceIds);

    /**
     * <desc>
     * 通过设备归属表获取设备id 多个id,号分隔
     * </desc>
     *
     * @param projectId 项目id
     * @param buildId   栋id数组
     * @param unitId    单元id数组
     * @return
     * @author Jiaqi.X
     * @createDate 2018/01/02
     */
    String getTalkDeviceIdsForBridge(@Param("projectId") String projectId,
                                     @Param("buildId") String buildId,
                                     @Param("unitId") String unitId,
                                     @Param("deviceIds") String[] deviceIds);


    /**
     * <desc>
     * 获取云对讲所属楼栋用户房间
     * </desc>
     *
     * @param deviceUniques 设备序列号
     * @param projectId     项目id
     * @param userId        用户id
     * @return
     */
    List<Map<String, Object>> getCloudUserRooms(@Param("deviceUniques") String[] deviceUniques,
                                                @Param("projectId") String projectId,
                                                @Param("userId") String userId);


    /**
     * <desc>
     * 更新设备排序值
     * <desc/>
     *
     * @param userId     用户id
     * @param projectId  项目id
     * @param deviceType 设备类型（1电梯，2门禁，3云对讲）
     * @param orders     所有有权限门禁设备排序值
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-06
     */
    Integer updateDeviceOrders(@Param("userId") String userId,
                               @Param("projectId") String projectId,
                               @Param("deviceType") Integer deviceType,
                               @Param("orders") String orders);

    /**
     * <desc>
     * 检查是否是门禁设备类型
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/10
     */
    Integer checkDeviceEntranceType(@RequestParam("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 检查是否是电梯设备类型
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/10
     */
    Integer checkDeviceFloorType(@RequestParam("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 检查是否是云对讲设备类型
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/30
     */
    Integer checkCloudTalkType(@RequestParam("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 获取当前楼栋号的电梯设备序列号集合
     * </desc>
     *
     * @param buildId 楼id
     * @param unitId  栋id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/14
     */
    List<String> getFloorUniqueByBuildIdAndUnitId(@Param("buildId") String buildId, @Param("unitId") String unitId);

    /**
     * <desc>
     * 获取用户在项目下拥有的房间的楼栋信息集合
     * </desc>
     *
     * @param userId    用户id
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/16
     */
    List<Map<String, Object>> getUserRoomBuildAndUnit(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 筛选出用户有权限的电梯设备楼栋信息及房屋楼栋信息的交集
     * </desc>
     *
     * @param deviceIds 电梯有权限的设备唯一标示数组
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/16
     */
    List<Map<String, Object>> getUserAuthFloorRoomBuildAndUnit(
            @Param("deviceIds") String[] deviceIds);

    /**
     * <desc>
     * 筛选出用户有权限的云对讲设备楼栋信息及房屋楼栋信息的交集
     * </desc>
     *
     * @param userRoomsBuildAndUnit 用户在当前项目下的房屋楼栋信息集合
     * @param deviceIds             电梯有权限的设备唯一标示数组
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/16
     */
    List<Map<String, Object>> getUserAuthCloudRoomBuildAndUnit(
            @Param("userRoomsBuildAndUnit") List<Map<String, Object>> userRoomsBuildAndUnit,
            @Param("deviceIds") String[] deviceIds);

    /**
     * <desc>
     * 通过用户id获取用户手机号
     * </desc>
     *
     * @param userId 用户id
     * @return
     * @date 2017/11/25
     * @author Jiaqi.X
     * @createDate 2017/11/25
     */
    String getUserPhoneNumByUserId(@Param("userId") String userId);

    /**
     * <desc>
     * 获取有权限的云对讲机号
     * </desc>
     *
     * @param cloudDeviceUniques 云对讲序列号id数组
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/16
     */
    String getAuthCloudDeviceIds(@Param("cloudDeviceUniques") String[] cloudDeviceUniques);

    /**
     * <desc>
     * 获取未欠费的房间编号
     * </desc>
     *
     * @param deviceUnique
     * @param userId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/07/04
     */
    String getNoArrearsRoomNumsByUserIdAndElevator(@Param("deviceUnique") String deviceUnique, @Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取有权限的门禁机号
     * </desc>
     *
     * @param entranceDeviceUniques 门禁序列号id数组
     * @return
     * @author Jiaqi.X
     * @createDate 2018/01/02
     */
    String getAuthEntranceDeviceIds(@Param("entranceDeviceUniques") String[] entranceDeviceUniques);

    /**
     * <desc>
     * 获取未欠费房间的楼层标识
     * </desc>
     *
     * @param noArrearsRoomNums
     * @return
     * @author Jiaqi.X
     * @createDate 2019/07/04
     */
    List<String> getNoArrearsNaturalFloor(@Param("noArrearsRoomNums") String[] noArrearsRoomNums, @Param("deviceUnique") String deviceUnique,
                                          @Param("startFloor") Integer startFloor, @Param("endFloor") Integer endFloor);

    /**
     * <desc>
     * 查询当前楼栋的有权限的电梯信息
     * </desc>
     *
     * @param floorDeviceUniques 用户有权限的电梯设备唯一标示数组
     * @param buildId            栋id
     * @param unitId             单元id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/16
     */
    List<Map<String, Object>> getCurrentBuildAndUnitFloorInfos(@Param("floorDeviceUniques") String[] floorDeviceUniques,
                                                               @Param("buildId") String buildId,
                                                               @Param("unitId") String unitId);

    /**
     * <desc>
     * 获取用户已认证的房屋信息
     * </desc>
     *
     * @param userId    用户id
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/23
     */
    List<Map<String, Object>> getUserRoomsInfos(@Param("userId") String userId,
                                                @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取当前楼栋的云对讲设备
     * </desc>
     *
     * @param buildId 栋id
     * @param unitId  单元id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/23
     */
    List<DeviceCloudIntercomInfoPO> getCloudDevicesByBuildAndUnit(@Param("buildId") String buildId,
                                                                  @Param("unitId") String unitId);

    /**
     * <desc>
     * 获取项目下的所有围墙机
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/23
     */
    List<DeviceCloudIntercomInfoPO> getProjectWallCloudDevices(@Param("projectId") String projectId);

    /**
     * <desc>
     * 保存设备附加信息
     * </desc>
     *
     * @param changes 设备附加信息集合
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/23
     */
    Integer saveDeviceBusinessChangeLogList(@Param("changes") List<DeviceBusinessChangeLogPO> changes);

    /**
     * <desc>
     * 获取用户所有项目id
     * </desc>
     *
     * @param userId 用户id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/23
     */
    String getUserAllProjectId(@Param("userId") String userId);

    /**
     * <desc>
     * 根据设备的楼层标识查询楼层名称
     * </desc>
     *
     * @param naturalFloorList
     * @return
     * @author duanwu.C
     * @createDate 2017/11/27
     */
    String getLogicalFloor(@Param("naturalFloorList") List<String> naturalFloorList, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 根据设备的楼层标识排序
     * </desc>
     *
     * @param naturalFloorList
     * @return
     * @author pengwei
     * @createDate 2020/12/22
     */
    String getLiveFloor(@Param("naturalFloorList") List<String> naturalFloorList, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 根据设备的真实楼层查询楼层名称
     * </desc>
     *
     * @param naturalFloorList
     * @return
     * @author duanwu.C
     * @createDate 2017/11/27
     */
    String getLogicalFloorsByFloorNum(@Param("floorNumList") List<String> naturalFloorList, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 根据设备的公共楼层标识查询楼层名称
     * </desc>
     *
     * @param commonFloorList
     * @return
     * @author shengen.T
     * @createDate 2018/05/18
     */
    String getCommonLogicalFloor(@Param("commonFloorList") List<String> commonFloorList, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 根据项目id查询sip地址和端口号
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/27
     */
    SipClusterPO getSipInfoByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     * 获取项目云对讲启用状态
     * </desc>
     *
     * @param projectId
     * @return
     */
    String getProjectIsSmartCommunity(@Param("projectId") String projectId);

    /**
     * <desc>
     * 更新用户二维码
     * </desc>
     *
     * @param userId        用户id
     * @param projectId     项目id
     * @param qrCode        二维码
     * @param qrCodeEndTime 二维码生效过期时间
     * @param qrCodeOverdueTime 二维码生效过期时间 Long 类型时间戳 过期时间120分钟
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/29
     */
    Integer updateUserQrCode(@Param("userId") String userId,
                             @Param("projectId") String projectId,
                             @Param("qrCode") String qrCode,
                             @Param("qrCodeEndTime") String qrCodeEndTime,
                             @Param("roomId") String roomId,
                             @Param("qrCodeOverdueTime") Long qrCodeOverdueTime);

    /**
     * <desc>
     * 更新用户二维码
     * </desc>
     *
     * @param userId        用户id
     * @param projectId     项目id
     * @param qrCode        二维码
     * @param qrCodeEndTime 二维码生效过期时间
     * @param qrCodeOverdueTime  二维码生效过期时间 Long 类型时间戳 过期时间120分钟
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/29
     */
    Integer updateNewUserQrCode(@Param("userId") String userId,
                                @Param("projectId") String projectId,
                                @Param("uid") String uid,
                                @Param("qrCode") String qrCode,
                                @Param("qrCodeEndTime") String qrCodeEndTime,
                                @Param("qrCodeOverdueTime") Long qrCodeOverdueTime);

    /**
     * <desc>
     * 根据房间id查询门口机
     * </desc>
     *
     * @param roomId
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/09
     */
    List<DeviceCloudIntercomInfoPO> getGatesByRoomId(@Param("roomId") String roomId);

    /**
     * <desc>
     * 根据多个房间id查询门口机
     * </desc>
     *
     * @param roomId 房间信息集合
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/09
     */
    List<PushCloudRoomInfoDeviceVO> getGatesByRoomIds(@Param("roomIds") List<Map<String, Object>> roomId);

    /**
     * <desc>
     * 根据房间id查询围墙机
     * </desc>
     *
     * @param roomId
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/09
     */
    List<DeviceCloudIntercomInfoPO> getWallsByRoomId(@Param("roomId") String roomId);

    /**
     * <desc>
     * 根据多个房间id查询围墙机
     * </desc>
     *
     * @param roomIds
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/09
     */
    List<PushCloudRoomInfoDeviceVO> getWallsByRoomIds(@Param("roomIds") List<Map<String, Object>> roomIds);

    /**
     * <desc>
     * 根据项目id查询当前项目有效用户id
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/11
     */
    List<String> getValidUserIdsByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     * 检查设备是否属于当前房间楼栋
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @param roomId       房间id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/18
     */
    Integer checkDeviceInRoom(@Param("deviceUnique") String deviceUnique, @Param("roomId") String roomId);

    /**
     * <desc>
     * 获取项目下有效的住户id
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/29
     */
    List<String> getValidProjectUserId(@Param("projectId") String projectId);

    /**
     * <desc>
     * 通过项目id获取项目秘钥
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2018/01/08
     */
    String getQrcodeProjectKey(@Param("projectId") String projectId);

    /**
     * <desc>
     * 通过实际楼层找到电梯的楼层编码
     * </desc>
     *
     * @param floorNum
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2018/01/19
     */
    String getFloorAuthByFloorNumAndDeviceUnique(@Param("floorNum") String floorNum, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 通过实际楼层找到电梯的楼层编码
     * </desc>
     *
     * @param floors
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2018/01/19
     */
    List<String> getNaturalFloorByFloorNum(@Param("floors") String[] floors, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 通过实际楼层找到电梯的楼层编码
     * </desc>
     *
     * @param floorNum
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2018/01/19
     */
    String getNaturalFloorByRoomNum(@Param("floorNum") String floorNum, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 获取没有设备地址的门禁设备
     * </desc>
     *
     * @param entrances 门禁设备机号数组
     * @return
     * @author Jiaqi.X
     * @createDate 2018/01/31
     */
    String getNotHaveAddressEntranceIds(@Param("entrances") String[] entrances, @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取没有设备地址的电梯设备
     * </desc>
     *
     * @param elevators 电梯机号数组
     * @return
     * @author Jiaqi.X
     * @createDate 2018/01/31
     */
    List<String> getNotHaveAddressElevators(@Param("elevators") String[] elevators);

    /**
     * <desc>
     * 根据设备序列号查询电梯
     * </desc>
     *
     * @param deviceUnique 设备序列号
     * @return
     * @author Jiaqi.X
     * @createDate 2018/04/11
     */
    CloudElevatorVO getElevatorNameAndProductKeyByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 通过真实楼层查到真实楼层名称
     * </desc>
     *
     * @param floorNum
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2018/01/19
     */
    String getLogicFloorByFloorNum(@Param("floorNum") String floorNum, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 查询电梯的起始楼层及结束楼层
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2018/07/03
     */
    Map<String, Object> getMinAndMaxFloor(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 获取呼梯需要的云电梯信息
     * </desc>
     *
     * @author Jiaqi.X
     * @createDate 2019/04/11
     */
    CloudElevatorVO getCallElevatorInfo(String deviceUnique);

    /**
     * <desc>
     * 根据设备唯一码获取门禁类型
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jugaung.S
     * @createDate 2019/05/26
     */
    Integer getEntranceTypeInfo(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 查询项目增值服务配置信息
     * </desc>
     *
     * @return 项目增值服务配置信息
     * @author wangzhi
     * @createDate 2019/05/28
     */
    String getPropertyValueDeploy(@Param("projectId") String projectId, @Param("type") Integer deviceType, @Param("day") Integer day);

    /**
     * <desc>
     * 根据房间id查询未缴账单数
     * </desc>
     *
     * @return 未缴账单数
     * @author wangzhi
     * @createDate 2019/05/28
     */
    Integer getUnpaidFeeCountByRoomId(List<String> roomIds);

    /**
     * <desc>
     * 根据用户id查询未缴账单数
     * </desc>
     *
     * @return 未缴账单数
     * @author wangzhi
     * @createDate 2019/05/28
     */
    Integer getUnpaidFeeCountByUserId(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 根据房间id查询最大欠费天数
     * </desc>
     *
     * @return 最大欠费天数
     * @author wangzhi
     * @createDate 2019/05/28
     */
    Integer getMaxArrearDaysByRoomId(@Param("list") List<String> roomIds, @Param("projectId") String projectId);

    /**
     * <desc>
     * 根据用户id查询最大欠费天数
     * </desc>
     *
     * @return 最大欠费天数
     * @author wangzhi
     * @createDate 2019/05/28
     */
    Integer getMaxArrearDaysByUserId(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 查询群控器电梯的起始楼层及结束楼层
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Qiang.S
     * @createDate 2019/03/27
     */
    Map<String, Object> getMinAndMaxFloorForController(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 根据设备序列号查询是否绑定控制器
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/04/22
     */
    Map<String, Object> getControllerDeviceUniqueByElevatorDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 检测是否是群控器
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/04/22
     */
    Map<String, Object> getControllerDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 根据真实楼层查询对应端子号
     * </desc>
     *
     * @param floorNums
     * @return
     * @author Jiaqi.X
     * @createDate 2019/04/22
     */
    String getFloorTerminalByFloorNum(@Param("floorNums") String[] floorNums, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 查询群控器下的其中一个电梯设备序列号
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/04/22
     */
    String getDeviceUniqueByController(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 根据设备序列号查询是否绑定控制器
     * </desc>
     *
     * @param device
     * @param deviceUniques
     * @return
     * @author Jiaqi.X
     * @createDate 2019/04/22
     */
    Map<String, Object> getControllerDeviceUniqueByElevatorDeviceUniques(@Param("device") String device, @Param("deviceUniques") String[] deviceUniques);

    /**
     * <desc>
     * 根据云群控器设备序列号查询绑定电梯的名称
     * </desc>
     *
     * @param controllerDeviceUnique 云群控器设备序列号
     * @return
     * @author Juguang.S
     * @createDate 2019/05/09
     */
    Map<String, Object> getElevatorNameByController(@Param("controllerDeviceUnique") String controllerDeviceUnique);

    /**
     * <desc>
     * 获取群控器的产品key
     * </desc>
     *
     * @return
     * @author Jiaqi.X
     * @createDate 2019/05/14
     */
    String getControllerProductKey();

    /**
     * <desc>
     * 根据房间id查询不欠费房间个数
     * </desc>
     *
     * @return 不欠费房间个数
     * @author wangzhi
     * @createDate 2019/06/17
     */
    Integer getNotArrRoomCountByRoomId(@Param("list") List<String> roomIds, @Param("projectId") String projectId);

    /**
     * <desc>
     * 根据用户id查询不欠费房间个数
     * </desc>
     *
     * @return 不欠费房间个数
     * @author wangzhi
     * @createDate 2019/06/17
     */
    Integer getNotArrRoomCountByUserId(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 根据设备序列号和用户id查询用户房间
     * </desc>
     *
     * @return 用户房间
     * @author wangzhi
     * @createDate 2019/07/01
     */
    String getRoomIdByDeviceUniqueAndUserId(@Param("deviceUnique") String deviceUnique, @Param("userId") String userId, @Param("projectId") String projectId, @Param("type") Integer deviceType);

    /**
     * <desc>
     * 更新个人设备排序值
     * </desc>
     *
     * @param userId        用户编号
     * @param projectId     项目编号
     * @param deviceUniques 设备编号逗号分隔
     * @return
     * @author Qiang.S
     * @createDate 2019/08/07
     */
    Integer uploadDeviceOrder(@Param("userId") String userId, @Param("projectId") String projectId, @Param("deviceUniques") String deviceUniques);

    /**
     * <desc>
     * 获取个人设备排序信息
     * </desc>
     *
     * @param userId    用户编号
     * @param projectId 项目编号
     * @return
     * @author Qiang.S
     * @createDate 2019/08/07
     */
    String getUserDeviceOrder(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 更新个人电梯设备排序值
     * </desc>
     *
     * @param userId        用户编号
     * @param projectId     项目编号
     * @param deviceUniques 设备编号逗号分隔
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2019/10/09
     */
    Integer uploadElevatorOrder(@Param("userId") String userId, @Param("projectId") String projectId, @Param("deviceUniques") String deviceUniques);

    /**
     * <desc>
     * 获取个人电梯设备排序信息
     * </desc>
     *
     * @param userId    用户编号
     * @param projectId 项目编号
     * @return 个人电梯设备排序信息
     * @author wangzhi
     * @createDate 2019/10/09
     */
    String getUserElevatorOrder(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取用户常用楼层
     * </desc>
     *
     * @param userId    用户编号
     * @param projectId 项目编号
     * @return 用户常用楼层
     * @author wangzhi
     * @createDate 2019/10/11
     */
    String getUserCommonFloor(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取用户常用公共楼层
     * </desc>
     *
     * @param userId    用户编号
     * @param projectId 项目编号
     * @return 用户常用公共楼层
     * @author pengwei
     * @createDate 2020-11-13
     */
    String getUserPublicFloor(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 根据房间id获取二维码配置信息
     * </desc>
     *
     * @param roomId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/12
     */
    PropertyQrcodeValidVO getPropertyQrocdeVliadInfo(@Param("roomId") String roomId);

    /**
     * <desc>
     * 根据楼层名称获取实际楼层和权限标识
     * </desc>
     *
     * @param floors
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/08/15
     */
    Map<String, Object> getFloorNumAndNaturalFloorByLogicFloor(@Param("floors") String[] floors, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 获取当前用户临时门禁设备列表
     * </desc>
     *
     * @param userId    用户Id
     * @param projectId 项目Id
     * @param doors     门禁的设备id数组
     * @return
     * @author Juguang.S
     * @createDate 2019/09/02
     */
    List<AppUserDevicesVO> getDoorDevicesByVisitor(@Param("userId") String userId, @Param("projectId") String projectId, @Param("doors") String[] doors);

    /**
     * <desc>
     * 获取当前用户临时电梯设备列表
     * </desc>
     *
     * @param userId    用户Id
     * @param projectId 项目Id
     * @param floorIds  电梯设备id数组
     * @return
     * @author Juguang.S
     * @createDate 2019/09/02
     */
    List<AppUserDevicesVO> getFloorDevicesByVisitor(@Param("userId") String userId, @Param("projectId") String projectId, @Param("floorIds") String[] floorIds);

    /**
     * <desc>
     * 获取当前用户临时云对讲设备列表
     * </desc>
     *
     * @param userId    用户Id
     * @param projectId 项目Id
     * @return
     * @author Juguang.S
     * @createDate 2019/09/02
     */
    List<AppUserDevicesVO> getCloudIntercomsByVisitor(@Param("userId") String userId, @Param("projectId") String projectId, @Param("cloudIntercoms") String[] cloudIntercoms);

    /**
     * <desc>
     * 添加。
     * <desc/>
     *
     * @param params
     * @return 返回影响函数
     * @author Juguang.S
     * @createDate 2019/09/02
     */
    Integer save(Map<String, Object> params);

    /**
     * <desc>
     * 修改。
     * <desc/>
     *
     * @param params
     * @return 返回影响函数
     * @author Juguang.S
     * @createDate 2019/09/02
     */
    Integer update(Map<String, Object> params);

    /**
     * <desc>
     * 根据标签ID获取标签信息
     * <desc/>
     *
     * @param markId 标签Id
     * @return 返回影响函数
     * @author Juguang.S
     * @createDate 2019/09/02
     */
    VisitorDeviceMarkInfoPO getDeviceMarkInfo(@Param("markId") String markId);

    /**
     * <desc>
     * 获取用户的临时权限的门禁设备机号
     * </desc>
     *
     * @param userId    用户Id
     * @param projectId 项目Id
     * @return 返回影响函数
     * @author Juguang.S
     * @createDate 2019/09/02
     */
    List<Map<String, Object>> getDoorAuthByVisitor(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取用户的临时权限的云对讲设备机号
     * </desc>
     *
     * @param userId
     * @param projectId
     * @param uid
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/16
     */
    Integer updateUid(@Param("userId") String userId, @Param("projectId") String projectId, @Param("uid") String uid);

    /**
     * <desc>
     * 查询用户类型
     * </desc>
     *
     * @return
     * @author Juguang.S
     * @createDate 2019/09/02
     */
    List<Map<String, Object>> getCloudIntercomsAuthByVisitor(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取用户的临时权限的电梯设备机号
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Juguang.S
     * @createDate 2019/09/02
     */
    List<AppElevatorAuthDTO> getFloorAuthByVisitor(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取当前用户的设备标签
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/16
     */
    QrcodeUserInfoVO getUserType(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * <p>
     * </desc>
     *
     * @author Juguang.S
     * @createDate 2019/09/02
     */
    List<VisitorDeviceMarkInfoVO> getDeviceMarkInfoByUserId(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 删除设备标签
     * </desc>
     *
     * @param markId 标签ID
     * @return
     * @author Juguang.S
     * @createDate 2019/09/03
     */
    Integer deleteDeviceMark(@Param("markId") String markId);

    /**
     * <desc>
     * 根据房间编号和项目编号获取房间下的业主编号
     * </desc>
     *
     * @param roomId    房间ID
     * @param projectId 项目ID
     * @return
     * @author Juguang.S
     * @createDate 2019/09/03
     */
    String getOwnerUserIdByroomId(@Param("roomId") String roomId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 根据真实楼层获取权限标识
     * </desc>
     *
     * @param floorOne
     * @param floorTwo
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/08
     */
    Map<String, Object> getNaturalByRealFloor(@Param("floorOne") String floorOne, @Param("floorTwo") String floorTwo, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 获取设备批次号所对应的过期时间。
     * <desc/>
     *
     * @param batchNumber 设备唯一码
     * @return
     * @author Juguang.S
     * @createDate 2019/11/25
     */
    String getBatchNumberEndTime(@Param("batchNumber") String batchNumber);

    /**
     * <desc>
     * 获取项目下最近批次号过期时间。
     * <desc/>
     *
     * @param projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2020/02/20
     */
    String getBatchNumberEndTimeByProjectId(@Param("projectId") String projectId, @Param("oldBatchNumberArr") List<String> oldBatchNumberArr);

    /**
     * <desc>
     * 获取项目下合并复用的旧批次号。
     * <desc/>
     *
     * @param projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2020/02/20
     */
    List<String> getOldBatchNumberByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     * 获取二维码长度
     * </desc>
     *
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/29
     */
    Integer getCodeLength(@Param("projectId") String projectId);

    /**
     * <desc>
     * 根据userId及projectId 获取常用楼层
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/30
     */
    String getCommonFloorByUserIdAndProjectId(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 根据设备序列号和类型获取设备名称
     * </desc>
     *
     * @param deviceUnique
     * @param type
     * @return
     * @author Jiaqi.X
     * @createDate 2019/11/08
     */
    String getDeviceNameByDeviceUniqueAndType(@Param("deviceUnique") String deviceUnique, @Param("type") Integer type);

    /**
     * <desc>
     * 根据设备序列号和类型获取设备收费模式
     * </desc>
     *
     * @param deviceUnique
     * @param type
     * @return
     * @author Juguang.S
     * @createDate 2021/03/10
     */
    String getDeviceModeByDeviceUniqueAndType(@Param("deviceUnique") String deviceUnique, @Param("type") Integer type);

    /**
     * <desc>
     * 检测电梯是否是房间地址下的设备
     * </desc>
     *
     * @param deviceUnique
     * @param unitId
     * @return
     * @authro Jiaqi.X
     * @createDate 2019/11/20
     */
    Integer checkElevatorInRoomAddress(@Param("deviceUnique") String deviceUnique, @Param("unitId") String unitId);

    /**
     * <desc>
     * 获取二维码相关信息，包含绑定的设备
     * </desc>
     *
     * @author wangzhi
     * @createDate 2020/02/26
     */
    OperateDeviceQRCodeInfoVO getQrCodeInfo(MiniScanQrCodePassDTO miniScanQrCodePassDTO);

    /**
     * <desc>
     * 根据项目id报获取iot项目配置信息
     * </desc>
     *
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2020/01/08
     */
    ProjectIotInfo getProjectIotInfoByProjectId(@Param("projectId") String projectId, @Param("deviceUnique") String deviceUnique,
                                                @Param("deviceType") Integer deviceType);

    /**
     * <desc>
     * 根据电梯设备唯一码获取地址信息
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author Juguang.S
     * @createDate 2020/03/24
     */
    List<MiniProgramUserRoomInfoVO> getAddressByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 根据门禁设备唯一码获取地址信息
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author Juguang.S
     * @createDate 2020/03/24
     */
    List<MiniProgramUserRoomInfoVO> getAddressByEntranceDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 根据楼栋ID查询单元信息
     * </desc>
     *
     * @param buildId 楼栋ID
     * @return
     * @author Juguang.S
     * @createDate 2020/03/24
     */
    List<Map<String, String>> getUnitInfoByBuildIdByElevator(@Param("buildId") String buildId, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 根据楼栋ID查询单元信息
     * </desc>
     *
     * @param buildId 楼栋ID
     * @return
     * @author Juguang.S
     * @createDate 2020/03/24
     */
    List<Map<String, String>> getUnitInfoByBuildIdByEntrance(@Param("buildId") String buildId, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 查询电梯iot版本
     * </desc>
     *
     * @return
     * @author Jiaqi.X
     * @createDate 2020/04/02
     */
    Integer getElevatorProductVersion();

    /**
     * <desc>
     * 获取排序后的电梯
     * </desc>
     *
     * @param floorSet
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2020/03/30
     */
    Map<String, Object> getOrderFloors(@Param("floorSet") Set<String> floorSet, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 获取电梯的公共楼层
     * </desc>
     *
     * @author wangzhi
     * @createDate 2020/04/30
     */
    Map<String, Object> getElevatorCommonFloor(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 获取游客模式下有公共楼层的电梯设备
     * </desc>
     *
     * @author wangzhi
     * @createDate 2020/05/06
     */
    List<AppFloorDevicesVO> getGuestFloorList(@Param("projectId") String projectId);

    /**
     * <desc>
     * 更新个人电梯和控制器设备排序值
     * </desc>
     *
     * @param userId        用户编号
     * @param projectId     项目编号
     * @param deviceUniques 设备编号逗号分隔
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2020/05/06
     */
    Integer uploadElevatorControllerOrder(@Param("userId") String userId, @Param("projectId") String projectId, @Param("deviceUniques") String deviceUniques);

    /**
     * <desc>
     * 获取个人电梯、群控器设备排序信息
     * </desc>
     *
     * @param userId    用户编号
     * @param projectId 项目编号
     * @return 个人电梯、群控器设备排序信息
     * @author wangzhi
     * @createDate 2020/05/07
     */
    String getUserElevatorControllerOrder(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取外呼设备
     * </desc>
     *
     * @param deviceUniques
     * @return
     * @author Jiaqi.X
     * @createDate 2020/04/17
     */
    List<AppOutCallDevicesVO> getOutCallDevices(@Param("deviceUniques") Set<String> deviceUniques);

    /**
     * <desc>
     * 检测电梯是否绑定外呼设备
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2020/04/24
     */
    Integer checkElevatorBindOutController(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 通过设备唯一编码查询公共楼层所对应的权限标识
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Juguang.S
     * @createDate 2020/08/07
     */
    String getCommonFloorAuthByDeviceUnique(@Param("floorNum") String[] floorNum, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 通过设备唯一编码查询公共楼层
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Juguang.S
     * @createDate 2020/08/07
     */
    String getCommonFloorByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 获取用户标签
     * <desc/>
     *
     * @param userId    用户编号
     * @param projectId 项目编号
     * @return 用户标签
     * @author pengwei
     * @createDate 2020-11-13
     */
    String getAppUserLabel(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取公共楼层和常用楼层
     * </desc>
     *
     * @Author chengshican
     * @Date 2020-11-19 16:26
     * @Param
     * @Return
     * @Exception
     */
    Map<String, Object>  getAppCommonAndPublicByUserId(@Param("userId") String userId, @Param("projectId") String projectId);


    /**
     * <desc>
     *     根据项目编号查询访客时间相关配置
     * </desc>
     *
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/29
     */
    Map<String,Object> getVisitorTime(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取用户门禁设备列表 暂于人脸一体式门禁权限机号只处理在二维码中 设备列表暂且隐藏 待设备列表放开时再将此方法删除
     * </desc>
     *
     * @param userId 用户Id
     * @param projectId 项目Id
     * @param doors 门禁的设备id数组
     * @return
     * @author Juguang.S
     * @createDate 2020/10/21
     */
    List<AppDoorDevicesVO> getDoorDevicesByTemp(@Param("userId")String userId,@Param("projectId")String projectId,@Param("doors")String[] doors);

    /**
     * <desc>
     *      根据设备id获取 recordId
     * </desc>
     *
     * @param
     * @return
     * @author caoshuai
     * @createDate 2020/12/27 14:57
     */
    Map<String, Object> getCloudElevatorCallStatusInfo(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      根据设备recordIds获取 获取用户ID
     * </desc>
     *
     * @param
     * @return
     * @author caoshuai
     * @createDate 2020/12/27 14:57
     */
    String getCloudElevatorOperateRecordInfo(@Param("recordIds") String recordIds);

    /**
     * <desc>
     *       获取群控器cmd
     * </desc>
     *
     * @param
     * @return
     * @author caoshuai
     * @createDate 2020/12/31 15:36
     */
    String getCloudControllerInfo(@Param("groupConId") String groupConId);

    /**
     * <desc>
     *       获取电梯cmd
     * </desc>
     *
     * @param
     * @return
     * @author caoshuai
     * @createDate 2020/12/31 16:28
     */
    String getCloudElevatorInfo(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      获取群控器下所有的电梯
     * </desc>
     *
     * @param
     * @return
     * @author caoshuai
     * @createDate 2020/12/31 16:30
     */
    List getCloudControllerElevatorInfo(@Param("groupConId") String groupConId);



    /**
     * <desc>
     * 通过门禁设备机号查询门禁所在地址
     * </desc>
     *
     * @author: chengshican
     *  @Date: 2021-01-04 12:11
     *
     */
    List<Map> getDeviceEntranceBridgeInfoByDeviceUnique(@Param("deviceUnique") String deviceUnique);


    /**
    *<desc>
    * 通过平板设备机号查询所在地址
    *</desc>
    *
    * @Author  chengshican
    * @Date   2021-01-28 10:33
    * @Param
    * @Return
    * @Exception
    *
    */
    List<Map> getPadBridgeInfoByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 获取用户标签
     * </desc>
     *
     * @param userId
     * @return
     * @author caoshuai
     * @createDate 2021/1/4 17:18
     */
    String getUserLabel(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 获取项目信息
     * </desc>
     *
     * @param projectId
     * @return
     * @author caoshuai
     * @createDate 2021/1/4 17:18
     */
    String iotByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     * 获取联动器 门禁 主序列号 sn
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author caoshuai
     * @createDate 2021/1/4 17:18
     */
    String getMainDeviceSnByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 根据设备的楼层标识排序
     * </desc>
     *
     * @param naturalFloorList
     * @return
     * @author Juguang.S
     * @createDate 2021/03/10
     */
    List<Map<String,Object>> getFloorNum(@Param("naturalFloorList") List<String> naturalFloorList, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     * 获取设备的真实楼层所对应房间的正背门属性
     * </desc>
     *
     * @return
     * @author Juguang.S
     * @createDate 2021/03/10
     */
    List<Map<String,Object>> getRoomLiftDoorType(@Param("floorNumList") List<String> floorNumList,
                                                 @Param("deviceUnique") String deviceUnique,
                                                 @Param("projectId") String projectId,
                                                 @Param("userId") String userId);

}
